<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/segment.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/segment.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfU0VHTUVOVF9IXzA_"><span class="b">_ASM_X86_SEGMENT_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfU0VHTUVOVF9IXzA_"><span class="b">_ASM_X86_SEGMENT_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="m">const</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> 
<a name="6" /><span class="True">       6:</span> <span class="k">/* Constructor for a conventional segment GDT (or LDT) entry */</span>
<a name="7" /><span class="True">       7:</span> <span class="k">/* This is a macro so it can be used in initializers */</span>
<a name="8" /><span class="True">       8:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZXzA_"><span class="b">GDT_ENTRY</span></a><span class="f">(</span><span class="b">flags</span><span class="f">,</span> <span class="b">base</span><span class="f">,</span> <span class="b">limit</span><span class="f">)</span>            \
<a name="9" /><span class="True">       9:</span>     <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">base</span><span class="f">)</span>  <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X0FDXzA_"><span class="b">_AC</span></a><span class="f">(</span><span class="c">0xff000000</span><span class="f">,</span><span class="b">ULL</span><span class="f">)</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="f">(</span><span class="c">56</span><span class="f">-</span><span class="c">24</span><span class="f">)</span><span class="f">)</span> <span class="f">|</span>    \
<a name="10" /><span class="True">      10:</span>      <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">flags</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X0FDXzA_"><span class="b">_AC</span></a><span class="f">(</span><span class="c">0x0000f0ff</span><span class="f">,</span><span class="b">ULL</span><span class="f">)</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="c">40</span><span class="f">)</span> <span class="f">|</span>    \
<a name="11" /><span class="True">      11:</span>      <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">limit</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X0FDXzA_"><span class="b">_AC</span></a><span class="f">(</span><span class="c">0x000f0000</span><span class="f">,</span><span class="b">ULL</span><span class="f">)</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="f">(</span><span class="c">48</span><span class="f">-</span><span class="c">16</span><span class="f">)</span><span class="f">)</span> <span class="f">|</span>    \
<a name="12" /><span class="True">      12:</span>      <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">base</span><span class="f">)</span>  <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X0FDXzA_"><span class="b">_AC</span></a><span class="f">(</span><span class="c">0x00ffffff</span><span class="f">,</span><span class="b">ULL</span><span class="f">)</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="c">16</span><span class="f">)</span> <span class="f">|</span>    \
<a name="13" /><span class="True">      13:</span>      <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">limit</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X0FDXzA_"><span class="b">_AC</span></a><span class="f">(</span><span class="c">0x0000ffff</span><span class="f">,</span><span class="b">ULL</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="14" /><span class="True">      14:</span> 
<a name="15" /><span class="True">      15:</span> <span class="k">/* Simple and small GDT entries for booting only */</span>
<a name="16" /><span class="True">      16:</span> 
<a name="17" /><span class="True">      17:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfQ1NfMA__"><span class="b">GDT_ENTRY_BOOT_CS</span></a>    <span class="c">2</span>
<a name="18" /><span class="True">      18:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19CT09UX0NTXzA_"><span class="b">__BOOT_CS</span></a>        <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfQ1NfMA__"><span class="b">GDT_ENTRY_BOOT_CS</span></a> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfRFNfMA__"><span class="b">GDT_ENTRY_BOOT_DS</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfQ1NfMA__"><span class="b">GDT_ENTRY_BOOT_CS</span></a> <span class="f">+</span> <span class="c">1</span><span class="f">)</span>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19CT09UX0RTXzA_"><span class="b">__BOOT_DS</span></a>        <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfRFNfMA__"><span class="b">GDT_ENTRY_BOOT_DS</span></a> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="22" /><span class="True">      22:</span> 
<a name="23" /><span class="True">      23:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfVFNTXzA_"><span class="b">GDT_ENTRY_BOOT_TSS</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfQ1NfMA__"><span class="b">GDT_ENTRY_BOOT_CS</span></a> <span class="f">+</span> <span class="c">2</span><span class="f">)</span>
<a name="24" /><span class="True">      24:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19CT09UX1RTU18w"><span class="b">__BOOT_TSS</span></a>        <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0JPT1RfVFNTXzA_"><span class="b">GDT_ENTRY_BOOT_TSS</span></a> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="False">      26:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="27" /><span class="False">      27:</span> <span class="k">/*</span>
<a name="28" /><span class="False">      28:</span> <span class="k"> * The layout of the per-CPU GDT under Linux:</span>
<a name="29" /><span class="False">      29:</span> <span class="k"> *</span>
<a name="30" /><span class="False">      30:</span> <span class="k"> *   0 - null</span>
<a name="31" /><span class="False">      31:</span> <span class="k"> *   1 - reserved</span>
<a name="32" /><span class="False">      32:</span> <span class="k"> *   2 - reserved</span>
<a name="33" /><span class="False">      33:</span> <span class="k"> *   3 - reserved</span>
<a name="34" /><span class="False">      34:</span> <span class="k"> *</span>
<a name="35" /><span class="False">      35:</span> <span class="k"> *   4 - unused            &lt;==== new cacheline</span>
<a name="36" /><span class="False">      36:</span> <span class="k"> *   5 - unused</span>
<a name="37" /><span class="False">      37:</span> <span class="k"> *</span>
<a name="38" /><span class="False">      38:</span> <span class="k"> *  ------- start of TLS (Thread-Local Storage) segments:</span>
<a name="39" /><span class="False">      39:</span> <span class="k"> *</span>
<a name="40" /><span class="False">      40:</span> <span class="k"> *   6 - TLS segment #1            [ glibc&apos;s TLS segment ]</span>
<a name="41" /><span class="False">      41:</span> <span class="k"> *   7 - TLS segment #2            [ Wine&apos;s %fs Win32 segment ]</span>
<a name="42" /><span class="False">      42:</span> <span class="k"> *   8 - TLS segment #3</span>
<a name="43" /><span class="False">      43:</span> <span class="k"> *   9 - reserved</span>
<a name="44" /><span class="False">      44:</span> <span class="k"> *  10 - reserved</span>
<a name="45" /><span class="False">      45:</span> <span class="k"> *  11 - reserved</span>
<a name="46" /><span class="False">      46:</span> <span class="k"> *</span>
<a name="47" /><span class="False">      47:</span> <span class="k"> *  ------- start of kernel segments:</span>
<a name="48" /><span class="False">      48:</span> <span class="k"> *</span>
<a name="49" /><span class="False">      49:</span> <span class="k"> *  12 - kernel code segment        &lt;==== new cacheline</span>
<a name="50" /><span class="False">      50:</span> <span class="k"> *  13 - kernel data segment</span>
<a name="51" /><span class="False">      51:</span> <span class="k"> *  14 - default user CS</span>
<a name="52" /><span class="False">      52:</span> <span class="k"> *  15 - default user DS</span>
<a name="53" /><span class="False">      53:</span> <span class="k"> *  16 - TSS</span>
<a name="54" /><span class="False">      54:</span> <span class="k"> *  17 - LDT</span>
<a name="55" /><span class="False">      55:</span> <span class="k"> *  18 - PNPBIOS support (16-&gt;32 gate)</span>
<a name="56" /><span class="False">      56:</span> <span class="k"> *  19 - PNPBIOS support</span>
<a name="57" /><span class="False">      57:</span> <span class="k"> *  20 - PNPBIOS support</span>
<a name="58" /><span class="False">      58:</span> <span class="k"> *  21 - PNPBIOS support</span>
<a name="59" /><span class="False">      59:</span> <span class="k"> *  22 - PNPBIOS support</span>
<a name="60" /><span class="False">      60:</span> <span class="k"> *  23 - APM BIOS support</span>
<a name="61" /><span class="False">      61:</span> <span class="k"> *  24 - APM BIOS support</span>
<a name="62" /><span class="False">      62:</span> <span class="k"> *  25 - APM BIOS support</span>
<a name="63" /><span class="False">      63:</span> <span class="k"> *</span>
<a name="64" /><span class="False">      64:</span> <span class="k"> *  26 - ESPFIX small SS</span>
<a name="65" /><span class="False">      65:</span> <span class="k"> *  27 - per-cpu            [ offset to per-cpu data area ]</span>
<a name="66" /><span class="False">      66:</span> <span class="k"> *  28 - stack_canary-20        [ for stack protector ]</span>
<a name="67" /><span class="False">      67:</span> <span class="k"> *  29 - unused</span>
<a name="68" /><span class="False">      68:</span> <span class="k"> *  30 - unused</span>
<a name="69" /><span class="False">      69:</span> <span class="k"> *  31 - TSS for double fault handler</span>
<a name="70" /><span class="False">      70:</span> <span class="k"> */</span>
<a name="71" /><span class="False">      71:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NSU5fMA__"><span class="b">GDT_ENTRY_TLS_MIN</span></a>    <span class="c">6</span>
<a name="72" /><span class="False">      72:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NQVhfMA__"><span class="b">GDT_ENTRY_TLS_MAX</span></a>     <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NSU5fMA__"><span class="b">GDT_ENTRY_TLS_MIN</span></a> <span class="f">+</span> <a href="cpu.c_macros_ref.html#_R0RUX0VOVFJZX1RMU19FTlRSSUVTXzA_"><span class="b">GDT_ENTRY_TLS_ENTRIES</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span>
<a name="73" /><span class="False">      73:</span> 
<a name="74" /><span class="False">      74:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU18w"><span class="b">GDT_ENTRY_DEFAULT_USER_CS</span></a>    <span class="c">14</span>
<a name="75" /><span class="False">      75:</span> 
<a name="76" /><span class="False">      76:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU18w"><span class="b">GDT_ENTRY_DEFAULT_USER_DS</span></a>    <span class="c">15</span>
<a name="77" /><span class="False">      77:</span> 
<a name="78" /><span class="False">      78:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_KERNEL_BASE</span>        <span class="f">(</span><span class="c">12</span><span class="f">)</span>
<a name="79" /><span class="False">      79:</span> 
<a name="80" /><span class="False">      80:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTF9DU18w"><span class="b">GDT_ENTRY_KERNEL_CS</span></a>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">0</span><span class="f">)</span>
<a name="81" /><span class="False">      81:</span> 
<a name="82" /><span class="False">      82:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTF9EU18w"><span class="b">GDT_ENTRY_KERNEL_DS</span></a>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">1</span><span class="f">)</span>
<a name="83" /><span class="False">      83:</span> 
<a name="84" /><span class="False">      84:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RTU18w"><span class="b">GDT_ENTRY_TSS</span></a>            <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">4</span><span class="f">)</span>
<a name="85" /><span class="False">      85:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0xEVF8w"><span class="b">GDT_ENTRY_LDT</span></a>            <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">5</span><span class="f">)</span>
<a name="86" /><span class="False">      86:</span> 
<a name="87" /><span class="False">      87:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PNPBIOS_BASE</span>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">6</span><span class="f">)</span>
<a name="88" /><span class="False">      88:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_APMBIOS_BASE</span>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">11</span><span class="f">)</span>
<a name="89" /><span class="False">      89:</span> 
<a name="90" /><span class="False">      90:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_ESPFIX_SS</span>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">14</span><span class="f">)</span>
<a name="91" /><span class="False">      91:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__ESPFIX_SS</span>            <span class="f">(</span><span class="b">GDT_ENTRY_ESPFIX_SS</span><span class="f">*</span><span class="c">8</span><span class="f">)</span>
<a name="92" /><span class="False">      92:</span> 
<a name="93" /><span class="False">      93:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PERCPU</span>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">15</span><span class="f">)</span>
<a name="94" /><span class="False">      94:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="95" /><span class="False">      95:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__KERNEL_PERCPU</span> <span class="f">(</span><span class="b">GDT_ENTRY_PERCPU</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="96" /><span class="False">      96:</span> <span class="f">#</span><span class="n">else</span>
<a name="97" /><span class="False">      97:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__KERNEL_PERCPU</span> <span class="c">0</span>
<a name="98" /><span class="False">      98:</span> <span class="f">#</span><span class="n">endif</span>
<a name="99" /><span class="False">      99:</span> 
<a name="100" /><span class="False">     100:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_STACK_CANARY</span>        <span class="f">(</span><span class="b">GDT_ENTRY_KERNEL_BASE</span><span class="f">+</span><span class="c">16</span><span class="f">)</span>
<a name="101" /><span class="False">     101:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX0NDX1NUQUNLUFJPVEVDVE9SXzA_"><span class="b">CONFIG_CC_STACKPROTECTOR</span></a>
<a name="102" /><span class="False">     102:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__KERNEL_STACK_CANARY</span>        <span class="f">(</span><span class="b">GDT_ENTRY_STACK_CANARY</span><span class="f">*</span><span class="c">8</span><span class="f">)</span>
<a name="103" /><span class="False">     103:</span> <span class="f">#</span><span class="n">else</span>
<a name="104" /><span class="False">     104:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__KERNEL_STACK_CANARY</span>        <span class="c">0</span>
<a name="105" /><span class="False">     105:</span> <span class="f">#</span><span class="n">endif</span>
<a name="106" /><span class="False">     106:</span> 
<a name="107" /><span class="False">     107:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_DOUBLEFAULT_TSS</span>    <span class="c">31</span>
<a name="108" /><span class="False">     108:</span> 
<a name="109" /><span class="False">     109:</span> <span class="k">/*</span>
<a name="110" /><span class="False">     110:</span> <span class="k"> * The GDT has 32 entries</span>
<a name="111" /><span class="False">     111:</span> <span class="k"> */</span>
<a name="112" /><span class="False">     112:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJJRVNfMA__"><span class="b">GDT_ENTRIES</span></a> <span class="c">32</span>
<a name="113" /><span class="False">     113:</span> 
<a name="114" /><span class="False">     114:</span> <span class="k">/* The PnP BIOS entries in the GDT */</span>
<a name="115" /><span class="False">     115:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PNPBIOS_CS32</span>        <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_BASE</span> <span class="f">+</span> <span class="c">0</span><span class="f">)</span>
<a name="116" /><span class="False">     116:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PNPBIOS_CS16</span>        <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_BASE</span> <span class="f">+</span> <span class="c">1</span><span class="f">)</span>
<a name="117" /><span class="False">     117:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PNPBIOS_DS</span>        <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_BASE</span> <span class="f">+</span> <span class="c">2</span><span class="f">)</span>
<a name="118" /><span class="False">     118:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PNPBIOS_TS1</span>        <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_BASE</span> <span class="f">+</span> <span class="c">3</span><span class="f">)</span>
<a name="119" /><span class="False">     119:</span> <span class="f">#</span><span class="n">define</span> <span class="b">GDT_ENTRY_PNPBIOS_TS2</span>        <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_BASE</span> <span class="f">+</span> <span class="c">4</span><span class="f">)</span>
<a name="120" /><span class="False">     120:</span> 
<a name="121" /><span class="False">     121:</span> <span class="k">/* The PnP BIOS selectors */</span>
<a name="122" /><span class="False">     122:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PNP_CS32</span>   <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_CS32</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>    <span class="k">/* segment for calling fn */</span>
<a name="123" /><span class="False">     123:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PNP_CS16</span>   <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_CS16</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>    <span class="k">/* code segment for BIOS */</span>
<a name="124" /><span class="False">     124:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PNP_DS</span>     <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_DS</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>    <span class="k">/* data segment for BIOS */</span>
<a name="125" /><span class="False">     125:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PNP_TS1</span>    <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_TS1</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>    <span class="k">/* transfer data segment */</span>
<a name="126" /><span class="False">     126:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PNP_TS2</span>    <span class="f">(</span><span class="b">GDT_ENTRY_PNPBIOS_TS2</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>    <span class="k">/* another data segment */</span>
<a name="127" /><span class="False">     127:</span> 
<a name="128" /><span class="False">     128:</span> <span class="k">/* Bottom two bits of selector give the ring privilege level */</span>
<a name="129" /><span class="False">     129:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9SUExfTUFTS18w"><span class="b">SEGMENT_RPL_MASK</span></a>    <span class="c">0x3</span>
<a name="130" /><span class="False">     130:</span> <span class="k">/* Bit 2 is table indicator (LDT/GDT) */</span>
<a name="131" /><span class="False">     131:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9USV9NQVNLXzA_"><span class="b">SEGMENT_TI_MASK</span></a>        <span class="c">0x4</span>
<a name="132" /><span class="False">     132:</span> 
<a name="133" /><span class="False">     133:</span> <span class="k">/* User mode is privilege level 3 */</span>
<a name="134" /><span class="False">     134:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VVNFUl9SUExfMA__"><span class="b">USER_RPL</span></a>        <span class="c">0x3</span>
<a name="135" /><span class="False">     135:</span> <span class="k">/* LDT segment has TI set, GDT has it cleared */</span>
<a name="136" /><span class="False">     136:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9MRFRfMA__"><span class="b">SEGMENT_LDT</span></a>        <span class="c">0x4</span>
<a name="137" /><span class="False">     137:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9HRFRfMA__"><span class="b">SEGMENT_GDT</span></a>        <span class="c">0x0</span>
<a name="138" /><span class="False">     138:</span> 
<a name="139" /><span class="False">     139:</span> <span class="k">/*</span>
<a name="140" /><span class="False">     140:</span> <span class="k"> * Matching rules for certain types of segments.</span>
<a name="141" /><span class="False">     141:</span> <span class="k"> */</span>
<a name="142" /><span class="False">     142:</span> 
<a name="143" /><span class="False">     143:</span> <span class="k">/* Matches PNP_CS32 and PNP_CS16 (they must be consecutive) */</span>
<a name="144" /><span class="False">     144:</span> <span class="f">#</span><span class="n">define</span> <span class="b">SEGMENT_IS_PNP_CODE</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>   <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xf4</span><span class="f">)</span> <span class="f">==</span> <span class="b">GDT_ENTRY_PNPBIOS_BASE</span> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="145" /><span class="False">     145:</span> 
<a name="146" /><span class="False">     146:</span> 
<a name="147" /><span class="True">     147:</span> <span class="f">#</span><span class="n">else</span>
<a name="148" /><span class="True">     148:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">cache</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="149" /><span class="True">     149:</span> 
<a name="150" /><span class="True">     150:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTDMyX0NTXzA_"><span class="b">GDT_ENTRY_KERNEL32_CS</span></a> <span class="c">1</span>
<a name="151" /><span class="True">     151:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTF9DU18w"><span class="b">GDT_ENTRY_KERNEL_CS</span></a> <span class="c">2</span>
<a name="152" /><span class="True">     152:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTF9EU18w"><span class="b">GDT_ENTRY_KERNEL_DS</span></a> <span class="c">3</span>
<a name="153" /><span class="True">     153:</span> 
<a name="154" /><span class="True">     154:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19LRVJORUwzMl9DU18w"><span class="b">__KERNEL32_CS</span></a>   <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTDMyX0NTXzA_"><span class="b">GDT_ENTRY_KERNEL32_CS</span></a> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="155" /><span class="True">     155:</span> 
<a name="156" /><span class="True">     156:</span> <span class="k">/*</span>
<a name="157" /><span class="True">     157:</span> <span class="k"> * we cannot use the same code segment descriptor for user and kernel</span>
<a name="158" /><span class="True">     158:</span> <span class="k"> * -- not even in the long flat mode, because of different DPL /kkeil</span>
<a name="159" /><span class="True">     159:</span> <span class="k"> * The segment offset needs to contain a RPL. Grr. -AK</span>
<a name="160" /><span class="True">     160:</span> <span class="k"> * GDT layout to get 64bit syscall right (sysret hardcodes gdt offsets)</span>
<a name="161" /><span class="True">     161:</span> <span class="k"> */</span>
<a name="162" /><span class="True">     162:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXzA_"><span class="b">GDT_ENTRY_DEFAULT_USER32_CS</span></a> <span class="c">4</span>
<a name="163" /><span class="True">     163:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU18w"><span class="b">GDT_ENTRY_DEFAULT_USER_DS</span></a> <span class="c">5</span>
<a name="164" /><span class="True">     164:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU18w"><span class="b">GDT_ENTRY_DEFAULT_USER_CS</span></a> <span class="c">6</span>
<a name="165" /><span class="True">     165:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19VU0VSMzJfQ1NfMA__"><span class="b">__USER32_CS</span></a>   <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXzA_"><span class="b">GDT_ENTRY_DEFAULT_USER32_CS</span></a><span class="f">*</span><span class="c">8</span><span class="f">+</span><span class="c">3</span><span class="f">)</span>
<a name="166" /><span class="True">     166:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19VU0VSMzJfRFNfMA__"><span class="b">__USER32_DS</span></a>    <a href="cpu.c_macros_noref.html#_X19VU0VSX0RTXzA_"><span class="b">__USER_DS</span></a>
<a name="167" /><span class="True">     167:</span> 
<a name="168" /><span class="True">     168:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RTU18w"><span class="b">GDT_ENTRY_TSS</span></a> <span class="c">8</span>    <span class="k">/* needs two entries */</span>
<a name="169" /><span class="True">     169:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0xEVF8w"><span class="b">GDT_ENTRY_LDT</span></a> <span class="c">10</span> <span class="k">/* needs two entries */</span>
<a name="170" /><span class="True">     170:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NSU5fMA__"><span class="b">GDT_ENTRY_TLS_MIN</span></a> <span class="c">12</span>
<a name="171" /><span class="True">     171:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NQVhfMA__"><span class="b">GDT_ENTRY_TLS_MAX</span></a> <span class="c">14</span>
<a name="172" /><span class="True">     172:</span> 
<a name="173" /><span class="True">     173:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1BFUl9DUFVfMA__"><span class="b">GDT_ENTRY_PER_CPU</span></a> <span class="c">15</span>    <span class="k">/* Abused to load per CPU data from limit */</span>
<a name="174" /><span class="True">     174:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19QRVJfQ1BVX1NFR18w"><span class="b">__PER_CPU_SEG</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1BFUl9DUFVfMA__"><span class="b">GDT_ENTRY_PER_CPU</span></a> <span class="f">*</span> <span class="c">8</span> <span class="f">+</span> <span class="c">3</span><span class="f">)</span>
<a name="175" /><span class="True">     175:</span> 
<a name="176" /><span class="True">     176:</span> <span class="k">/* TLS indexes for 64bit - hardcoded in arch_prctl */</span>
<a name="177" /><span class="True">     177:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RlNfVExTXzA_"><span class="b">FS_TLS</span></a> <span class="c">0</span>
<a name="178" /><span class="True">     178:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R1NfVExTXzA_"><span class="b">GS_TLS</span></a> <span class="c">1</span>
<a name="179" /><span class="True">     179:</span> 
<a name="180" /><span class="True">     180:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R1NfVExTX1NFTF8w"><span class="b">GS_TLS_SEL</span></a> <span class="f">(</span><span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NSU5fMA__"><span class="b">GDT_ENTRY_TLS_MIN</span></a><span class="f">+</span><a href="cpu.c_macros_noref.html#_R1NfVExTXzA_"><span class="b">GS_TLS</span></a><span class="f">)</span><span class="f">*</span><span class="c">8</span> <span class="f">+</span> <span class="c">3</span><span class="f">)</span>
<a name="181" /><span class="True">     181:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RlNfVExTX1NFTF8w"><span class="b">FS_TLS_SEL</span></a> <span class="f">(</span><span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX1RMU19NSU5fMA__"><span class="b">GDT_ENTRY_TLS_MIN</span></a><span class="f">+</span><a href="cpu.c_macros_noref.html#_RlNfVExTXzA_"><span class="b">FS_TLS</span></a><span class="f">)</span><span class="f">*</span><span class="c">8</span> <span class="f">+</span> <span class="c">3</span><span class="f">)</span>
<a name="182" /><span class="True">     182:</span> 
<a name="183" /><span class="True">     183:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJJRVNfMA__"><span class="b">GDT_ENTRIES</span></a> <span class="c">16</span>
<a name="184" /><span class="True">     184:</span> 
<a name="185" /><span class="True">     185:</span> <span class="f">#</span><span class="n">endif</span>
<a name="186" /><span class="True">     186:</span> 
<a name="187" /><span class="True">     187:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19LRVJORUxfQ1NfMA__"><span class="b">__KERNEL_CS</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTF9DU18w"><span class="b">GDT_ENTRY_KERNEL_CS</span></a><span class="f">*</span><span class="c">8</span><span class="f">)</span>
<a name="188" /><span class="True">     188:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19LRVJORUxfRFNfMA__"><span class="b">__KERNEL_DS</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0tFUk5FTF9EU18w"><span class="b">GDT_ENTRY_KERNEL_DS</span></a><span class="f">*</span><span class="c">8</span><span class="f">)</span>
<a name="189" /><span class="True">     189:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19VU0VSX0RTXzA_"><span class="b">__USER_DS</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU18w"><span class="b">GDT_ENTRY_DEFAULT_USER_DS</span></a><span class="f">*</span><span class="c">8</span><span class="f">+</span><span class="c">3</span><span class="f">)</span>
<a name="190" /><span class="True">     190:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19VU0VSX0NTXzA_"><span class="b">__USER_CS</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU18w"><span class="b">GDT_ENTRY_DEFAULT_USER_CS</span></a><span class="f">*</span><span class="c">8</span><span class="f">+</span><span class="c">3</span><span class="f">)</span>
<a name="191" /><span class="True">     191:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="192" /><span class="True">     192:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2V0X2tlcm5lbF9ycGxfMA__"><span class="b">get_kernel_rpl</span></a><span class="f">(</span><span class="f">)</span>  <span class="c">0</span>
<a name="193" /><span class="True">     193:</span> <span class="f">#</span><span class="n">endif</span>
<a name="194" /><span class="True">     194:</span> 
<a name="195" /><span class="True">     195:</span> <span class="k">/* User mode is privilege level 3 */</span>
<a name="196" /><span class="True">     196:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VVNFUl9SUExfMA__"><span class="b">USER_RPL</span></a>        <span class="c">0x3</span>
<a name="197" /><span class="True">     197:</span> <span class="k">/* LDT segment has TI set, GDT has it cleared */</span>
<a name="198" /><span class="True">     198:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9MRFRfMA__"><span class="b">SEGMENT_LDT</span></a>        <span class="c">0x4</span>
<a name="199" /><span class="True">     199:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9HRFRfMA__"><span class="b">SEGMENT_GDT</span></a>        <span class="c">0x0</span>
<a name="200" /><span class="True">     200:</span> 
<a name="201" /><span class="True">     201:</span> <span class="k">/* Bottom two bits of selector give the ring privilege level */</span>
<a name="202" /><span class="True">     202:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9SUExfTUFTS18w"><span class="b">SEGMENT_RPL_MASK</span></a>    <span class="c">0x3</span>
<a name="203" /><span class="True">     203:</span> <span class="k">/* Bit 2 is table indicator (LDT/GDT) */</span>
<a name="204" /><span class="True">     204:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VHTUVOVF9USV9NQVNLXzA_"><span class="b">SEGMENT_TI_MASK</span></a>        <span class="c">0x4</span>
<a name="205" /><span class="True">     205:</span> 
<a name="206" /><span class="True">     206:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_SURUX0VOVFJJRVNfMA__"><span class="b">IDT_ENTRIES</span></a> <span class="c">256</span>
<a name="207" /><span class="True">     207:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TlVNX0VYQ0VQVElPTl9WRUNUT1JTXzA_"><span class="b">NUM_EXCEPTION_VECTORS</span></a> <span class="c">32</span>
<a name="208" /><span class="True">     208:</span> <span class="k">/* Bitmask of exception vectors which push an error code on the stack */</span>
<a name="209" /><span class="True">     209:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhDRVBUSU9OX0VSUkNPREVfTUFTS18w"><span class="b">EXCEPTION_ERRCODE_MASK</span></a>  <span class="c">0x00027d00</span>
<a name="210" /><span class="True">     210:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX1NJWkVfMA__"><span class="b">GDT_SIZE</span></a> <span class="f">(</span><a href="cpu.c_macros_noref.html#_R0RUX0VOVFJJRVNfMA__"><span class="b">GDT_ENTRIES</span></a> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="211" /><span class="True">     211:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_R0RUX0VOVFJZX1RMU19FTlRSSUVTXzA_"><span class="b">GDT_ENTRY_TLS_ENTRIES</span></a> <span class="c">3</span>
<a name="212" /><span class="True">     212:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VExTX1NJWkVfMA__"><span class="b">TLS_SIZE</span></a> <span class="f">(</span><a href="cpu.c_macros_ref.html#_R0RUX0VOVFJZX1RMU19FTlRSSUVTXzA_"><span class="b">GDT_ENTRY_TLS_ENTRIES</span></a> <span class="f">*</span> <span class="c">8</span><span class="f">)</span>
<a name="213" /><span class="True">     213:</span> 
<a name="214" /><span class="True">     214:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19LRVJORUxfX18w"><span class="b">__KERNEL__</span></a>
<a name="215" /><span class="True">     215:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="216" /><span class="True">     216:</span> <span class="m">extern</span> <span class="m">const</span> <span class="m">char</span> <span class="b">early_idt_handlers</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_TlVNX0VYQ0VQVElPTl9WRUNUT1JTXzA_"><span class="b">NUM_EXCEPTION_VECTORS</span></a><span class="f">]</span><span class="f">[</span><span class="c">2</span><span class="f">+</span><span class="c">2</span><span class="f">+</span><span class="c">5</span><span class="f">]</span><span class="f">;</span>
<a name="217" /><span class="True">     217:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1RSQUNJTkdfMA__"><span class="b">CONFIG_TRACING</span></a>
<a name="218" /><span class="True">     218:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_dHJhY2VfZWFybHlfaWR0X2hhbmRsZXJzXzA_"><span class="b">trace_early_idt_handlers</span></a> <span class="b">early_idt_handlers</span>
<a name="219" /><span class="True">     219:</span> <span class="f">#</span><span class="n">endif</span>
<a name="220" /><span class="True">     220:</span> 
<a name="221" /><span class="True">     221:</span> <span class="k">/*</span>
<a name="222" /><span class="True">     222:</span> <span class="k"> * Load a segment. Fall back on loading the zero</span>
<a name="223" /><span class="True">     223:</span> <span class="k"> * segment if something goes wrong..</span>
<a name="224" /><span class="True">     224:</span> <span class="k"> */</span>
<a name="225" /><span class="True">     225:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bG9hZHNlZ21lbnRfMA__"><span class="b">loadsegment</span></a><span class="f">(</span><span class="b">seg</span><span class="f">,</span> <span class="b">value</span><span class="f">)</span>                        \
<a name="226" /><span class="True">     226:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="227" /><span class="True">     227:</span>     <span class="m">unsigned</span> <span class="m">short</span> <span class="b">__val</span> <span class="f">=</span> <span class="f">(</span><span class="b">value</span><span class="f">)</span><span class="f">;</span>                    \
<a name="228" /><span class="True">     228:</span>                                     \
<a name="229" /><span class="True">     229:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;						\n&quot;</span>    \
<a name="230" /><span class="True">     230:</span>              <span class="e">&quot;1:	movl %k0,%%&quot;</span> <span class="f">#</span><span class="b">seg</span> <span class="e">&quot;		\n&quot;</span>    \
<a name="231" /><span class="True">     231:</span>                                     \
<a name="232" /><span class="True">     232:</span>              <span class="e">&quot;.section .fixup,\&quot;ax\&quot;			\n&quot;</span>    \
<a name="233" /><span class="True">     233:</span>              <span class="e">&quot;2:	xorl %k0,%k0			\n&quot;</span>    \
<a name="234" /><span class="True">     234:</span>              <span class="e">&quot;		jmp 1b				\n&quot;</span>    \
<a name="235" /><span class="True">     235:</span>              <span class="e">&quot;.previous					\n&quot;</span>    \
<a name="236" /><span class="True">     236:</span>                                     \
<a name="237" /><span class="True">     237:</span>              <a href="cpu.c_macros_ref.html#_X0FTTV9FWFRBQkxFXzA_"><span class="b">_ASM_EXTABLE</span></a><span class="f">(</span><span class="c">1b</span><span class="f">,</span> <span class="c">2b</span><span class="f">)</span>                \
<a name="238" /><span class="True">     238:</span>                                     \
<a name="239" /><span class="True">     239:</span>              <span class="f">:</span> <span class="e">&quot;+r&quot;</span> <span class="f">(</span><span class="b">__val</span><span class="f">)</span> <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>            \
<a name="240" /><span class="True">     240:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="241" /><span class="True">     241:</span> 
<a name="242" /><span class="True">     242:</span> <span class="k">/*</span>
<a name="243" /><span class="True">     243:</span> <span class="k"> * Save a segment register away</span>
<a name="244" /><span class="True">     244:</span> <span class="k"> */</span>
<a name="245" /><span class="True">     245:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2F2ZXNlZ21lbnRfMA__"><span class="b">savesegment</span></a><span class="f">(</span><span class="b">seg</span><span class="f">,</span> <span class="b">value</span><span class="f">)</span>                \
<a name="246" /><span class="True">     246:</span>     <span class="m">asm</span><span class="f">(</span><span class="e">&quot;mov %%&quot;</span> <span class="f">#</span><span class="b">seg</span> <span class="e">&quot;,%0&quot;</span><span class="f">:</span><span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">value</span><span class="f">)</span> <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span>
<a name="247" /><span class="True">     247:</span> 
<a name="248" /><span class="True">     248:</span> <span class="k">/*</span>
<a name="249" /><span class="True">     249:</span> <span class="k"> * x86_32 user gs accessors.</span>
<a name="250" /><span class="True">     250:</span> <span class="k"> */</span>
<a name="251" /><span class="False">     251:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="252" /><span class="False">     252:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32_LAZY_GS</span>
<a name="253" /><span class="False">     253:</span> <span class="f">#</span><span class="n">define</span> <span class="b">get_user_gs</span><span class="f">(</span><span class="b">regs</span><span class="f">)</span>    <span class="f">(</span><span class="b">u16</span><span class="f">)</span><span class="f">(</span><span class="f">{</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">v</span><span class="f">;</span> <a href="cpu.c_macros_noref.html#_c2F2ZXNlZ21lbnRfMA__"><span class="b">savesegment</span></a><span class="f">(</span><span class="b">gs</span><span class="f">,</span> <span class="b">v</span><span class="f">)</span><span class="f">;</span> <span class="b">v</span><span class="f">;</span><span class="f">}</span><span class="f">)</span>
<a name="254" /><span class="False">     254:</span> <span class="f">#</span><span class="n">define</span> <span class="b">set_user_gs</span><span class="f">(</span><span class="b">regs</span><span class="f">,</span> <span class="b">v</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_bG9hZHNlZ21lbnRfMA__"><span class="b">loadsegment</span></a><span class="f">(</span><span class="b">gs</span><span class="f">,</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">v</span><span class="f">)</span><span class="f">)</span>
<a name="255" /><span class="False">     255:</span> <span class="f">#</span><span class="n">define</span> <span class="b">task_user_gs</span><span class="f">(</span><span class="b">tsk</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="b">tsk</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">thread</span><span class="f">.</span><span class="b">gs</span><span class="f">)</span>
<a name="256" /><span class="False">     256:</span> <span class="f">#</span><span class="n">define</span> <span class="b">lazy_save_gs</span><span class="f">(</span><span class="b">v</span><span class="f">)</span>        <a href="cpu.c_macros_noref.html#_c2F2ZXNlZ21lbnRfMA__"><span class="b">savesegment</span></a><span class="f">(</span><span class="b">gs</span><span class="f">,</span> <span class="f">(</span><span class="b">v</span><span class="f">)</span><span class="f">)</span>
<a name="257" /><span class="False">     257:</span> <span class="f">#</span><span class="n">define</span> <span class="b">lazy_load_gs</span><span class="f">(</span><span class="b">v</span><span class="f">)</span>        <a href="cpu.c_macros_noref.html#_bG9hZHNlZ21lbnRfMA__"><span class="b">loadsegment</span></a><span class="f">(</span><span class="b">gs</span><span class="f">,</span> <span class="f">(</span><span class="b">v</span><span class="f">)</span><span class="f">)</span>
<a name="258" /><span class="False">     258:</span> <span class="f">#</span><span class="n">else</span>    <span class="k">/* X86_32_LAZY_GS */</span>
<a name="259" /><span class="False">     259:</span> <span class="f">#</span><span class="n">define</span> <span class="b">get_user_gs</span><span class="f">(</span><span class="b">regs</span><span class="f">)</span>    <span class="f">(</span><span class="b">u16</span><span class="f">)</span><span class="f">(</span><span class="f">(</span><span class="b">regs</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">gs</span><span class="f">)</span>
<a name="260" /><span class="False">     260:</span> <span class="f">#</span><span class="n">define</span> <span class="b">set_user_gs</span><span class="f">(</span><span class="b">regs</span><span class="f">,</span> <span class="b">v</span><span class="f">)</span>    <span class="m">do</span> <span class="f">{</span> <span class="f">(</span><span class="b">regs</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">gs</span> <span class="f">=</span> <span class="f">(</span><span class="b">v</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="261" /><span class="False">     261:</span> <span class="f">#</span><span class="n">define</span> <span class="b">task_user_gs</span><span class="f">(</span><span class="b">tsk</span><span class="f">)</span>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_dGFza19wdF9yZWdzXzA_"><span class="b">task_pt_regs</span></a><span class="f">(</span><span class="b">tsk</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">gs</span><span class="f">)</span>
<a name="262" /><span class="False">     262:</span> <span class="f">#</span><span class="n">define</span> <span class="b">lazy_save_gs</span><span class="f">(</span><span class="b">v</span><span class="f">)</span>        <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="263" /><span class="False">     263:</span> <span class="f">#</span><span class="n">define</span> <span class="b">lazy_load_gs</span><span class="f">(</span><span class="b">v</span><span class="f">)</span>        <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="264" /><span class="False">     264:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* X86_32_LAZY_GS */</span>
<a name="265" /><span class="True">     265:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* X86_32 */</span>
<a name="266" /><span class="True">     266:</span> 
<a name="267" /><span class="True">     267:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">get_limit</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">segment</span><span class="f">)</span>
<a name="268" /><span class="True">     268:</span> <span class="f">{</span>
<a name="269" /><span class="True">     269:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">__limit</span><span class="f">;</span>
<a name="270" /><span class="True">     270:</span>     <span class="m">asm</span><span class="f">(</span><span class="e">&quot;lsll %1,%0&quot;</span> <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">__limit</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">segment</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="271" /><span class="True">     271:</span>     <span class="m">return</span> <span class="b">__limit</span> <span class="f">+</span> <span class="c">1</span><span class="f">;</span>
<a name="272" /><span class="True">     272:</span> <span class="f">}</span>
<a name="273" /><span class="True">     273:</span> 
<a name="274" /><span class="True">     274:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !__ASSEMBLY__ */</span>
<a name="275" /><span class="True">     275:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __KERNEL__ */</span>
<a name="276" /><span class="True">     276:</span> 
<a name="277" /><span class="True">     277:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_SEGMENT_H */</span>
<a name="278" /><span class="True">     278:</span> </pre>
  </body>
</html>
